package io.github.wslxm.springbootplus2.core.base.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.time.temporal.ChronoUnit;

/**
 * 单条限流规则
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface XjCurrentLimit {

    /**
     * 单位
     * 秒    ChronoUnit.SECONDS (默认)
     * 分    ChronoUnit.MINUTES
     * 时    ChronoUnit.HOURS
     * 天    ChronoUnit.DAYS
     *
     * @return
     */
    ChronoUnit timeUnit() default ChronoUnit.SECONDS;

    /**
     * 限流维度类型
     * IP: 根据客户端IP限流
     * USER: 根据用户ID限流
     * CUSTOM: 自定义key (需配合limitKey()使用)
     * DEFAULT: 不区分来源，全局限流(默认)
     */
    LimitScope scope() default LimitScope.GLOBAL;

    /**
     * 自定义限流key (当 dimension= CUSTOM 时使用)
     */
    String limitKey() default "";

    /**
     * 允许请求数量 (根据 field + dimension)
     *
     * @return
     */
    int qps() default 100;

    /**
     * 限流错误信息
     *
     * @return
     */
    String errorMsg() default "当前服务人数过多,请稍后重试!";
}